"""
浏览器复用:

以Chrome为例:
配置过程:
    1. 关闭所有 Chrome 浏览器页面 ( 最好到任务管理器中搜索并关闭 )
    2. 为浏览器配置系统环境变量
    3. 启动命令:
            windows:
                chrome --remote-debugging-port=9222
            mac:
                Google\
                Chrome --remote-debugging-port=9222
                 (将上两行写到一行 , 第一行之后有一个空格 .)
    4. 验证是否启动成功
            在启动的浏览器地址栏中输入: localhost:9222
            如果是无法访问 , 则表示出错了
            如果有展示信息 , 不是无法访问 , 则表示成功了


应用场景:
    1.
        不能通过用户名密码登录的网站 , 先启动好浏览器 , 登录网站 , 然后复用浏览器访问网站 .
        此时访问网站 , 直接就是登录状态 .

    2.
        调试代码时候 , 浏览器是复用状态的 , 则可以逐行调试代码 , 非常好用 .
        浏览器页面一直在 , 跟着代码一行一行走 , 可以写一行调试一行 .
        比如:
            self.driver.get('https://www.baidu.com')
        访问了百度首页 , 需要定位搜索框了 ,
        则:
            #  self.driver.get('https://www.baidu.com').send_keys('输入内容')
            self.driver.find_element(By.CSS_SELECTOR, 'wd')
            # 注释掉访问百度的那一行 , 此是因为浏览器是复用状态 ,
            # 则不需要再次访问百度首页 , 因为打开的就是这个页面 ,
            # 直接运行定位搜索框的代码就好 .
         接下来需要点击 <<百度一下>> 按钮了 ,
         则:
            #  self.driver.get('https://www.baidu.com').send_keys('输入内容')
            #  self.driver.find_element(By.CSS_SELECTOR, 'wd')
            self.driver.find_element(By.CSS_SELECTOR, 'su')
            # 注释掉前面的代码 , 从定位 <<百度一下>> 按钮这行开始运行 ,
            # 同样是因为浏览器复用状态 , 页面状态时输入内容的状态 .
            # 此是定位搜索按钮 , 再点击 , 正好能进行搜索 .


复用浏览器应用场景总结:
    1. 不容易登录的界面 , 先登录再操作 .
    2. 调试代码时候 , 一行一行调试 ( 否则需要先在浏览器中调试好定位语句 , 再应用到代码中 )


复用浏览器用来调式代码非常好用 , 用来登录还是比较有限制性的 , 毕竟每次都要人为登录一下才行 .
除了复用浏览器来实现登录场景外 , 还可以用 cookies 的方式来实现 .


"""
from selenium import webdriver
from selenium.webdriver.chrome.options import Options


class TestReuseBrowser:
    wecom_url = 'https://work.weixin.qq.com/wework_admin/frame'

    def setup(self):
        options = Options()
        options.debugger_address = 'localhost:9222'
        self.driver = webdriver.Chrome(options=options)
        self.driver.maximize_window()
        self.driver.implicitly_wait(2)

    def test_oo1(self):
        """
        提前在浏览器登录企业微信
        运行程序访问首页 , 则自动是登录状态 .
        """
        self.driver.get(self.wecom_url)
